package com.yida.wy.vote.outside.service;

import com.yida.wy.vote.outside.domain.dto.WyBaseBuildHouseOwnerDTO;
import com.yida.wy.vote.outside.domain.dto.WyVoteOwnerProjectListDTO;
import com.yida.wy.vote.outside.domain.dto.WyVoteProjectDetailDTO;
import com.yida.wy.vote.outside.domain.request.WyVoteOwnerProjectQueryRequest;
import com.yida.wy.vote.outside.domain.request.WyVoteProjectQueryRequest;
import com.yida.wy.vote.outside.domain.request.WyVoteProjectRequest;
import com.yida.wy.vote.outside.domain.WyVoteProject;

import java.util.List;

/**
 * 投票项目Service接口
 *
 * @author lqq
 * @date 2023-03-10
 */
public interface IWyVoteProjectService {
	/**
	 * 查询投票项目
	 *
	 * @param voteId 投票项目主键
	 * @return 投票项目
	 */
	public WyVoteProject selectVoteProjectByVoteId(Long voteId);

	/**
	 * 查询投票项目列表
	 *
	 * @param voteProject 投票项目
	 * @return 投票项目集合
	 */
	public List<WyVoteProject> selectVoteProjectList(WyVoteProjectQueryRequest voteProject);


	/**
	 * 查询投票公示项目列表
	 *
	 * @param voteProject 投票项目
	 * @return 投票项目集合
	 */
	public List<WyVoteProject> selectVotePublicizeProjectList(WyVoteProjectQueryRequest voteProject);

	/**
	 * 新增投票项目
	 *
	 * @param voteProject 投票项目
	 * @return 结果
	 */
	public int insertVoteProject(WyVoteProject voteProject);

	/**
	 * 修改投票项目
	 *
	 * @param voteProject 投票项目
	 * @return 结果
	 */
	public int updateVoteProject(WyVoteProject voteProject);

	/**
	 * 修改投票项目访问次数
	 *
	 * @param voteProject 投票项目
	 * @return 结果
	 */
	public int updateVoteProjectAccessNum(WyVoteProject voteProject);

	/**
	 * 批量删除投票项目
	 *
	 * @param voteIds 需要删除的投票项目主键集合
	 * @return 结果
	 */
	public int deleteVoteProjectByVoteIds(Long[] voteIds);

	/**
	 * 删除投票项目信息
	 *
	 * @param voteId 投票项目主键
	 * @return 结果
	 */
	public int deleteVoteProjectByVoteId(Long voteId);

	/**
	 * 投票详情
	 *
	 * @param voteId 投票ID
	 * @return 结果
	 */
	WyVoteProjectDetailDTO voteDetail(Long voteId);

	/**
	 * 新增投票
	 *
	 * @param request 投票项目
	 * @param data    基础楼栋房屋业主数据
	 * @return 结果
	 */
	Long addVote(WyVoteProjectRequest request, WyBaseBuildHouseOwnerDTO data);

	/**
	 * 校验时间参数
	 *
	 * @param request 投票项目
	 */
	void checkTime(WyVoteProjectRequest request);

	/**
	 * 保存或修改
	 *
	 * @param request    投票项目
	 * @param submitFlag 是否是提交
	 * @return 结果
	 */
	boolean updateOrSubmitVote(WyVoteProjectRequest request, boolean submitFlag);

	/**
	 * 取消投票
	 *
	 * @param voteId 投票ID
	 * @return 结果
	 */
	int voteCancel(Long voteId);

	/**
	 * 发起投票
	 *
	 * @param voteId 投票ID
	 * @return 结果
	 */
	int voteStart(Long voteId);

	/**
	 * 短信通知
	 *
	 * @param voteId 投票ID
	 * @return 结果
	 */
	boolean voteSmsNotification(Long voteId);

	/**
	 * 修改时投票信息是验证状态
	 *
	 * @param voteId 投票ID
	 * @return /
	 */
	WyVoteProject checkProjectForUpdate(Long voteId);

	/**
	 * 选择楼栋
	 *
	 * @param baseAllDataDTO 基础楼栋房屋业主
	 * @return 结果
	 */
	boolean confirmSelectBuild(WyBaseBuildHouseOwnerDTO baseAllDataDTO);

	/**
	 * 取消选择楼栋
	 *
	 * @param buildIds 投票楼栋ID集合
	 * @param voteId       投票ID
	 * @return 结果
	 */
	boolean cancelSelectBuild(Long[] buildIds, Long voteId);

	/**
	 * 选择房屋
	 *
	 * @param voteHouseIds 投票房屋ID集合
	 * @param voteId       投票ID
	 * @return 结果
	 */
	boolean confirmSelectHouse(Long[] voteHouseIds, Long voteId);

	/**
	 * 取消选择房屋
	 *
	 * @param voteHouseIds 投票房屋ID集合
	 * @param voteId       投票ID
	 * @return 结果
	 */
	boolean cancelSelectHouse(Long[] voteHouseIds, Long voteId);

	/**
	 * 查询业主可投票项目列表
	 *
	 * @param request 业主ID
	 * @return 投票项目集合
	 */
	List<WyVoteOwnerProjectListDTO> selectVoteOwnerProjectList(WyVoteOwnerProjectQueryRequest request);
}
